<?php

/**
 * Permite hacer operaciones con la tabla empleado de la base de datos
 * @package simertweb 
 * @subpackage models 
 * @category Administración
 * @author Grecia Espinoza <mrcl2587@gmail.com>
 * @author Juan Maldonado  <jgmaldonadoj@gmail.com>
 * @version 1.0  
 */
class Mempleado extends Mpersona {

    function __construct() {
        parent::__construct();
        $this->load->model('mrol');
        $this->load->model('mhistorico');
        $this->load->library('encrypt');
    }

    /**
     * Verifica si un nombre de usuario existe
     * @return boolean
     */
    function validar_usuario() {
        $this->db->where('usuario', $_POST["nombreusuario"]);
        $query = $this->db->get('empleado');
        if ($query->num_rows() == 0) {
            return TRUE;
        } else {
            return FALSE;
        }
    }

    /**
     * Genera una contraseña de acceso para los nuevos usuario o controladores
     * @return type string
     */
    function generar_contrasenia() {
        $this->load->helper('string');
        return random_string('contrasenia', 8);
    }

    /**
     * Obtiene el id de empleado
     * @param type $usuario es el nombre del usuario
     * @return type int
     */
    function indice($usuario) {
        $this->db->where('usuario', $usuario);
        $query = $this->db->get('empleado')->row()->idEmpleado;
        return $query;
    }

    /**
     * Obtiene el nombre de usuario
     * @param type $id es el id del empleado
     * @return type string
     */
    function usuario($id) {
        $this->db->where('idEmpleado', $id);
        $query = $this->db->get('empleado')->row()->usuario;
        return $query;
    }

    /**
     * Para modificar un usuario del sistema verifica que el nombre de usuario no existe
     * @return boolean
     */
    function validar_usuario_modificar() {
        $this->db->where('idEmpleado !=', $_POST["codigo"]);
        $this->db->where('usuario', $_POST["nombreusuario"]); //busca la persna segun la cedula ingresada
        $query = $this->db->get('empleado');
        if ($query->num_rows() == 0) {
            return TRUE;
        } else {
            return FALSE;
        }
    }

    /**
     * Para modificar un controlador verifica que el nombre de usuario no existe
     * @return boolean
     */
    function validar_personal_modificar() {
        $id = $this->obtener_idEmpleado($_POST["codigo"]);
        $this->db->where('idEmpleado !=', $id);
        $this->db->where('usuario', $_POST["nombreusuario"]); //busca la persna segun la cedula ingresada
        $query = $this->db->get('empleado');
        if ($query->num_rows() == 0) {
            return TRUE;
        } else {
            return FALSE;
        }
    }

    /**
     * Guarda a un empleado(usuario o controlador)
     */
    function guardarUsuario() {
        $this->guardarPersona();
        $this->db->where('cedula', $_POST["cedula"]); //busca la persna segun la cedula ingresada
        $query = $this->db->get('persona')->row();
        $this->db->where('tipo', $_POST["tipo"]);
        $query2 = $this->db->get('rol')->row();
        $data = array(//obtiene los datos del formulario y los almacena en las variables
            'usuario' => $_POST['nombreusuario'],
            'contraseña' => md5($_POST['clave']),
            'habilitado' => 1,
            'idRol' => $query2->idRol,
            'idPersona' => $query->idPersona
        );
        $this->db->insert('empleado', $data); //guarda los datos en la bd
        $this->mhistorico->guardar_acceso($this->indice($_POST['nombreusuario']), "Creación de un usuario del sistema");
    }

    /**
     * Obtiene los usuarios inhabilitados
     * @param type $dato es el criterio de la búsqueda
     * @return type array
     */
    function buscar_usuarios_deshabilitados($dato) {
        $idEmpleado = $this->mempleado->indice($this->session->userdata('usuario'));
        $idRol = $this->mrol->id_rol();
        $this->db->where('idRol !=', $idRol);
        $this->db->where('idEmpleado !=', $idEmpleado);
        $this->db->like('usuario', $dato, 'after');
        $this->db->where('habilitado', 0);
        $query = $this->db->get('empleado');
        return $query->result();
    }

    /**
     * Obtiene los usuarios habilitados
     * @param type $dato es el criterio de la búsqueda
     * @return type array
     */
    function listarUsuario($dato) {
        $idRol = $this->mrol->id_rol();
        $idEmpleado = $this->mempleado->indice($this->session->userdata('usuario'));
        $this->db->where('idRol !=', $idRol);
        $this->db->where('idEmpleado !=', $idEmpleado);
        $this->db->like('usuario', $dato, 'after');
        $this->db->where('habilitado', 1);
        $query = $this->db->get('empleado');
        return $query->result();
    }

    /**
     * Obtiene la lista de todos los usuarios excepto del usuario actual
     * @param type $dato es el criterio de búsqueda
     * @return type
     */
    function listarUsuario_clave($dato) {
        $idEmpleado = $this->mempleado->indice($this->session->userdata('usuario'));
        $this->db->where('idEmpleado !=', $idEmpleado);
        $this->db->like('usuario', $dato, 'after');
        $query = $this->db->get('empleado');
        return $query->result();
    }

    /**
     * Obtiene los datos completos de un usuario
     * @param type $dato es el nombre de usuario
     * @return type array
     */
    function datosUsuario($dato) {
        $this->db->where('usuario', $dato);
        $query = $this->db->get('empleado');
        $query2 = $this->datosPersona($query);
        return array_merge($query2, $query->result());
    }

    /**
     * Obtiene los datos de un usuario
     * @param type $usuario es el nombre de usuario
     * @return type array
     */
    function datos_usuario($usuario) {
        $this->db->where('usuario', $usuario);
        $query = $this->db->get('empleado');
        return $query->result();
    }

    /**
     * Obtiene el id del empleado
     * @param type $id es el id del controlador
     * @return type int
     */
    function obtener_idEmpleado($id) {
        $this->db->where('idControlador', $id);
        $query = $this->db->get('controlador')->row()->Empleado_idEmpleado;
        return $query;
    }

    /**
     * Verifica que un empleado exista
     * @param type $id es el id del empleado
     * @return type int
     */
    function obtener_id($id) {
        $this->db->where('idEmpleado', $id);
        $query = $this->db->get('empleado')->row()->idEmpleado;
        return $query;
    }

    /**
     * Actualiza los datos de un empleado(usuario o controlador)
     * @param type $id es el id del empleado
     * @param type $usuario es el nombre de usuario
     */
    function actualizar_usuario($id, $usuario) {
        $query = $this->obtener_idPersona($id);
        $this->actualizar_persona($query, $_POST["nombres"], $_POST["apellidos"], $_POST["cedula"], $_POST["direccion"], $_POST["telefono"], $_POST["correo"]);
        if (!isset($_POST['habilitado'])) {
            $habilitado = 0;
        } else {
            $habilitado = 1;
        }
        $data = array(
            'usuario' => $usuario,
            'habilitado' => $habilitado
        );
        $this->db->where('idEmpleado', $id);
        $this->db->update('empleado', $data);
        $this->mhistorico->guardar_acceso($id, 'Modificación de un usuario del sistema');
    }

    /**
     * Obtiene una lista de todos los usuarios del sistema
     * @return type array
     */
    function listar_usuarios() {
        $idRol = $this->mrol->id_rol();
        $idEmpleado = $this->mempleado->indice($this->session->userdata('usuario'));
        $this->db->where('idRol !=', $idRol);
        $this->db->where('idEmpleado !=', $idEmpleado);
        $query = $this->db->get('empleado');
        return $query->result();
    }

    /**
     * Obtiene una lista de los usuarios habilitados
     * @return type array   
     */
    function listar_usuarios_habilitados() {
        $idRol = $this->mrol->id_rol();
        $idEmpleado = $this->mempleado->indice($this->session->userdata('usuario'));
        $this->db->where('idRol !=', $idRol);
        $this->db->where('idEmpleado !=', $idEmpleado);
        $this->db->where('habilitado', 1);
        $query = $this->db->get('empleado');
        return $query->result();
    }

    /**
     * Obtiene una lista de los usuarios inhabilitados
     * @return type array   
     */
    function listar_usuarios_deshabilitados() {
        $idRol = $this->mrol->id_rol();
        $idEmpleado = $this->mempleado->indice($this->session->userdata('usuario'));
        $this->db->where('idRol !=', $idRol);
        $this->db->where('idEmpleado !=', $idEmpleado);
        $this->db->where('habilitado', 0);
        $query = $this->db->get('empleado');
        return $query->result();
    }

    /**
     * Lista todos los usuarios del sistema excepto el usuario actual
     * @return type array
     */
    function listar_todos_usuarios() {
        $idEmpleado = $this->mempleado->indice($this->session->userdata('usuario'));
        $this->db->where('idEmpleado !=', $idEmpleado);
        $this->db->where('habilitado', 1);
        $query = $this->db->get('empleado');
        return $query->result();
    }

    function listar_usuarios_clave() {
        $idEmpleado = $this->mempleado->indice($this->session->userdata('usuario'));
        $this->db->where('idEmpleado !=', $idEmpleado);
        $this->db->where('habilitado', 1);
        $query = $this->db->get('empleado');
        return $query->result();
    }

    /**
     * Obtiene un empleado(usuarios y controladores) con su respectivo rol
     * @return type array
     */
    function listar_usuario_rol() {
        $this->db->where('idEmpleado', $_POST['modificar']);
        $lista = $this->db->get('empleado')->result();
        foreach ($lista as $value) {
            $data = array(
                'id' => $value->idEmpleado,
                'usuario' => $value->usuario,
                'rol' => $this->mrol->obtener_tipo_rol($value->idRol),
            );
        }
        return $data;
    }

    /**
     * Obtiene una lista de empleadso(usuarios y controladores) con su respectivo rol
     * @return type array
     */
    function listar_usuarios_rol() {
        $lista = $this->listar_todos_usuarios();
        $usuarios = array();
        foreach ($lista as $value) {
            $data = array(
                'id' => $value->idEmpleado,
                'usuario' => $value->usuario,
                'rol' => $this->mrol->obtener_tipo_rol($value->idRol),
            );
            array_push($usuarios, $data);
        }
        return $usuarios;
    }

    /**
     * Actualiza la contraseña de un empleado(usuario o controlador)
     * @param type $usuario es el nombre de usurio
     * @param type $contraseña es la nueva contraseña
     */
    function cambiar_clave($usuario, $contraseña) {
        $data = array(
            'contraseña' => md5($contraseña)
        );
        $this->db->where('usuario', $usuario);
        $this->db->update('empleado', $data);
        $this->mhistorico->guardar_acceso($this->indice($usuario), "Cambio de contraseña");
    }

    /**
     * CAmbia el rol de un emplrado
     * @param type $usuario es el nombre de usuario
     * @param type $rol es el nuevo rol asignado
     */
    function cambiar_rol($usuario, $rol) {
        $data = array(
            'idRol' => $this->mrol->id_rol2($rol)
        );
        $this->db->where('usuario', $usuario);
        $this->db->update('empleado', $data);
        $this->mhistorico->guardar_acceso($this->indice($usuario), "Cambio de rol");
    }

    /**
     * Obtiene el id de rol de un usuario
     * @param type $usuario es nombre de usuario
     * @return type int
     */
    function obtener_idRol($usuario) {
        $this->db->where('usuario', $usuario);
        $id = $this->db->get('empleado')->row()->idRol;
        return $id;
    }

    function obtener_ide($idPersona) {
        $this->db->where('idPersona', $idPersona);
        $id = $this->db->get('empleado')->row()->idEmpleado;
        return $id;
    }

}

?>